

import java.awt.*;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;
import static stale.Stale.*;
import static skalowanie.Skalowanie.*;

@SuppressWarnings("serial")
public class OknoPlanszy extends JPanel implements Runnable {

	Image pngMur, pngMurTmp;
	Image pngKulka, pngKulkaTmp;
	Image pngZlaKulka, pngZlaKulkaTmp;
	Image pngDroga, pngDrogaTmp;
	Image pngWizerunekPacmanTmp, pngWizerunekDuchTmp;
	Pacman pacman;
	Wrog duch, duch1, duch2, duch3;
    MenadzerDzwieku music;
	Poziom obecnyPoziom;
	Thread watekPlanszy;
	public OknoPlanszy() throws IOException{
		setPreferredSize(new Dimension(SZEROKOSC_POLA_GRY, WYSOKOSC_POLA_GRY));
		setBackground(Color.black);
		obecnyPoziom=new Poziom("1.pgm");
		pngMur=ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_MUR));
		pngKulka=ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_KULKA));
		pngZlaKulka=ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_ZLA_KULKA));
		pngDroga=ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_DROGA));
		pacman=new Pacman(this, ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_PACMAN)));
		duch=new Wrog(this, ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_WROG)));
		duch1=new Wrog(this, ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_WROG)));
		duch2=new Wrog(this, ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_WROG)));
		duch3=new Wrog(this, ImageIO.read(new File (SCIEZKA_OKNO_PLANSZY_WROG)));
		music=new MenadzerDzwieku();    
	}
	
	public void rozpocznijGre(){
		watekPlanszy= new Thread(this);
		watekPlanszy.start(); 
		music.wlacz();
		obecnyPoziom.reset();
	}
	
	public void zakonczGre(){
		watekPlanszy.stop();
		music.wylacz();
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		int sze = getWidth();
		int wys = getHeight();
		
			
		int szeKafla=(int)sze/KAFLE_NA_SZER;
		int wysKafla=(int)wys/KAFLE_NA_WYS;

		int przesunWysrPoziom = (int)((sze-(KAFLE_NA_SZER*szeKafla))/2);
		int przesunWysrPion = (int)((wys-(KAFLE_NA_WYS*wysKafla))/2);
		pngMurTmp = przeskalujObraz(pngMur, szeKafla, wysKafla);
		pngKulkaTmp =przeskalujObraz(pngKulka, szeKafla, wysKafla);
		pngZlaKulkaTmp= przeskalujObraz(pngZlaKulka, szeKafla, wysKafla);
		pngDrogaTmp= przeskalujObraz(pngDrogaTmp, szeKafla, wysKafla);
		pngWizerunekPacmanTmp = przeskalujObraz(pacman.pngWizerunek, szeKafla, wysKafla);
		pngWizerunekDuchTmp = przeskalujObraz(duch.pngWizerunek, szeKafla, wysKafla);
		
		for(int i=0; i<(int)KAFLE_NA_WYS;i++){
			for(int j=0; j<(int)KAFLE_NA_SZER;j++){
				
				switch(obecnyPoziom.jakiePole(i,j)){
				case MUR:
					g.drawImage(pngMurTmp,przesunWysrPoziom+j*szeKafla,przesunWysrPion+i*wysKafla,this);
					break;
				case PUSTKA:
					g.drawImage(pngDrogaTmp,przesunWysrPoziom+j*szeKafla,przesunWysrPion+i*wysKafla,this);
					break;
				case KULKOWE:
					g.drawImage(pngKulkaTmp,przesunWysrPoziom+j*szeKafla,przesunWysrPion+i*wysKafla,this);
					break;
				case TRUJACE:
					g.drawImage(pngZlaKulkaTmp,przesunWysrPoziom+j*szeKafla,przesunWysrPion+i*wysKafla,this);
					break;
				case EATERSPAWN:
					g.drawImage(pngDrogaTmp,przesunWysrPoziom+j*szeKafla,przesunWysrPion+i*wysKafla,this);
					break;
				case DUCHSPAWN:
					g.drawImage(pngDrogaTmp,przesunWysrPoziom+j*szeKafla,przesunWysrPion+i*wysKafla,this);
					break;
				default:
					g.drawImage(pngMurTmp,przesunWysrPoziom+j*szeKafla,przesunWysrPion+i*wysKafla,this);
				} 
			
				
			
			}
		}
		g.drawImage(pngWizerunekPacmanTmp,przesunWysrPoziom+(int)(pacman.x*szeKafla),przesunWysrPion+(int)(pacman.y*wysKafla),this);
		g.drawImage(pngWizerunekDuchTmp,przesunWysrPoziom+(int)(duch.x*szeKafla),przesunWysrPion+(int)(duch.y*wysKafla),this);
		g.drawImage(pngWizerunekDuchTmp,przesunWysrPoziom+(int)(duch1.x*szeKafla),przesunWysrPion+(int)(duch1.y*wysKafla),this);
		g.drawImage(pngWizerunekDuchTmp,przesunWysrPoziom+(int)(duch2.x*szeKafla),przesunWysrPion+(int)(duch2.y*wysKafla),this);
		g.drawImage(pngWizerunekDuchTmp,przesunWysrPoziom+(int)(duch3.x*szeKafla),przesunWysrPion+(int)(duch3.y*wysKafla),this);

		//System.out.println(pacman.x +" " + pacman.y);
	}
	/*
	public void addNotify(){
		super.addNotify();
		System.out.println("addNotify");
	}*/


	@Override
	public void run() {
		long czasP = System.currentTimeMillis();
		while(true){
			
			pacman.animuj(czasP);
			duch.animuj(czasP);
			duch1.animuj(czasP);
			duch2.animuj(czasP);
			duch3.animuj(czasP);
			czasP = System.currentTimeMillis();	
			
			revalidate();
			repaint();
			try {
				Thread.sleep(15);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
}